package marketplace.web.beans;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import marketplace.ejb.interfaces.IUsuarioEJB;
import marketplace.ejb.interfaces.IVentaEJB;
import marketplace.jpa.datas.DataProveedor;
import marketplace.web.utils.UtilsBean;

import org.primefaces.event.RowEditEvent;


@ManagedBean
@SessionScoped
public class ProveedorBean {

	@EJB
	IUsuarioEJB pvEjb;

	@EJB
	IVentaEJB ventaEJB;
	

	
	private String nick;
	private String mail;
	private String nomCompleto;
	private String apellido;
	private String password;
	private Date fechaNto;
	private String movil;
	private char sexo;	
	private String qr;
	private String rx;
	private String ry;
	private int idC;
	private List<DataProveedor> proveedores;
	

	/////////////////////// CONSTRUCTOR ///////////////////////	
	

	@PostConstruct
    private void cargarProveedores() {
    	try {
    		setQr(" ");
			setProveedores(pvEjb.getProveedores());
		} catch (Exception e) {
			System.out.println("Funcion cargarProveedores: " + e.getMessage());
		}  
    } 	
	
	/////////////////////// GETERS & SETERS ///////////////////////	


	public String getNick() { return nick; }
	public void setNick(String nick) { this.nick = nick; }
	public String getNomCompleto() {return nomCompleto;}
	public void setNomCompleto(String nomCompleto) {this.nomCompleto = nomCompleto;}
	public String getMail() {return mail;}
	public void setMail(String mail) {this.mail = mail;}
	public String getPassword() {return password;}
	public void setPassword(String password) {this.password = password;}
	public Date getFechaNto() { return fechaNto; }
	public void setFechaNto(Date fechaNto) { this.fechaNto = fechaNto; }
	public String getMovil() { return movil; }
	public void setMovil(String movil) { this.movil = movil; }
	public char getSexo() { return sexo; }
	public void setSexo(char sexo) { this.sexo = sexo; }
	public String getQr() { return qr; }
	public void setQr(String qr) { this.qr = qr; }		
	
	public List<DataProveedor> getProveedores(){ return proveedores; }  	
	public void setProveedores(List<DataProveedor> proveedores) { this.proveedores = proveedores; }
	

	//////////////////////////////// OPERACIONES ///////////////////////////////////	

	//GET REGISTRAR
	public void getRegistroProveedor() throws Exception{
		FacesContext.getCurrentInstance().getExternalContext().redirect("proveedorRegistro.xhtml");
	}
	
	//POST REGISTRAR
	public void postRegistroProveedor(ActionEvent actionEvent){	
		String pass = null;
		UtilsBean ub = new UtilsBean();
		try {
			pass = ub.cryptMD5(getPassword());
			if(getNomCompleto().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su nombre",""));
			else if(getMail().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su correo",""));
			else if(!ub.ValidarMail(mail))
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"El correo ingresado no es valido",""));
			else if (!pvEjb.existeProveedor(getMail(), pass)) {
				
				SimpleDateFormat f =new SimpleDateFormat("dd/MM/yy");
		 		String fechaString = f.format(getFechaNto());
				
		 		new UtilsBean().renombrarLogo(getMail());
		 		
				//ub.QRCode(getQr());
				
				pvEjb.guardarProveedor(getNick(), getNomCompleto(), getMail(), getApellido(), pass, fechaString, getMovil(), getSexo(), getQr());			
				
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha registrado", getNomCompleto() + "!, correctamente"));
				FacesContext.getCurrentInstance().getExternalContext().redirect("market/index.xhtml");
			}else{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERROR en el Registro: El mail, ya existe",""));
			}
		} catch (Exception e) {
			System.out.println("ERROR postRegistrarProveedor: " + e.getMessage());;
		}
	}	
	
    //MODIFICAR
    public void onEditProveedor(RowEditEvent event) {
	    DataProveedor pvWeb = ((DataProveedor) event.getObject());
		try {
			pvEjb.modificarProveedor(pvWeb);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha modificado el Proveedor: ", pvWeb.getMail() + " !,  correctamente"));
		} catch (Exception e) {
			e.printStackTrace();
		}
    }  
      
    public void onCancelProveedor(RowEditEvent event) {  
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Operacion cancelada para: ", ((DataProveedor) event.getObject()).getMail()));  
    }
    
	//ELIMINAR
	public void postEliminarProveedor(String mail){
		try {
			pvEjb.eliminarProveedor(mail);
			cargarProveedores();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha eliminado", mail + "!, correctamente"));			
		} catch (Exception e) {
			System.out.println("ERROR postEliminarProveedor: " + mail);
		}
	}	

	//GET MODIFICAR
	public void getModificarProveedor(String mail) throws Exception{
		
		DataProveedor prov = pvEjb.obtenerProveedor(mail);
		
		setMail(prov.getMail());
		setNick(prov.getNick());
		setNomCompleto(prov.getNomCompleto());
		setApellido(prov.getApellido());
		
		SimpleDateFormat f = new SimpleDateFormat("dd/MM/yy");
		@SuppressWarnings("deprecation")
		Date fecha = new Date(prov.getFechaNto());
		f.format(fecha);

		setFechaNto(fecha);
		setSexo(prov.getSexo());
		setMovil(prov.getMovil());

		setQr(prov.getQr());
		
		new UtilsBean().QRCode(prov.getQr(), prov.getMail());		
		
		FacesContext.getCurrentInstance().getExternalContext().redirect("proveedorModificar.xhtml");
	}
	
	
    //POST MODIFICAR
	
    public void postModificarProveedor() {
		
		SimpleDateFormat f = new SimpleDateFormat("dd/MM/yy");
 		String fechaString = f.format(getFechaNto());				
 		new UtilsBean().renombrarLogo(getMail());
	    DataProveedor pWeb = new DataProveedor(getNick(), getMail(), getNomCompleto(), getApellido(), getPassword(), fechaString, getMovil(), getSexo(), getQr());
	    
		try {
			pvEjb.modificarProveedor(pWeb);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha modificado el proveedor: ", pWeb.getMail() + " !,  correctamente"));
			FacesContext.getCurrentInstance().getExternalContext().redirect("index.xhtml");
		} catch (Exception e) {
			System.out.println("ERROR postModificarProveedor: " + e.getMessage());
		}
		
    } 		
	
	
	public void getInfoProveedor(String mail) throws Exception{
		DataProveedor prov = pvEjb.obtenerProveedor(mail);
		
		setMail(prov.getMail());
		setNick(prov.getNick());
		setNomCompleto(prov.getNomCompleto());
		setApellido(prov.getApellido());
		
		SimpleDateFormat f = new SimpleDateFormat("dd/MM/yy");
		@SuppressWarnings("deprecation")
		Date fecha = new Date(prov.getFechaNto());
		f.format(fecha);

		setFechaNto(fecha);
		setSexo(prov.getSexo());
		setMovil(prov.getMovil());

		setQr(prov.getQr());

		new UtilsBean().QRCode(prov.getQr(), prov.getMail());
		
		FacesContext.getCurrentInstance().getExternalContext().redirect("proveedorVer.xhtml");
	}
	
	
	
	
	
	public void getEstadisticas(int idC) throws Exception{
		this.idC = idC;
		FacesContext.getCurrentInstance().getExternalContext().redirect("estadisticasDescargasContenido.xhtml");
		
			
	}
	
	//LISTAR
	public void getListarProveedor() throws Exception{
		FacesContext.getCurrentInstance().getExternalContext().redirect("proveedorListar.xhtml");
	}

	
	
	public String getSexo(String sex){
		if (sex.equals("M"))
			return "Masculino";
		else
			return "Femenino";		
	}
	
	
	
	public String getRx() throws Exception {
		rx =  ventaEJB.getDescargasContenidoX();
		return rx;
	}

	public void setRx(String rx) {
		this.rx = rx;
	}

	public String getRy() throws Exception {
		ry = ventaEJB.getDescargasContenidoY(1);
		return ry;
	}

	public void setRy(String ry) {
		this.ry = ry;
	}

	public int getIdC() {
		return idC;
	}

	public void setIdC(int idC) {
		this.idC = idC;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}


   
}
